/*
 * Copyright 2018 JDCLOUD.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * 云鼎2.0 openApi
 * 云鼎2.0 openApi 相关接口
 *
 * OpenAPI spec version: v2
 * Contact: 
 *
 * NOTE: This class is auto generated by the jdcloud code generator program.
 */


using JDCloudSDK.Core.Auth;
using JDCloudSDK.Core.Client;
using JDCloudSDK.Core.Http;
using JDCloudSDK.Yunding.Apis;
using JDCloudSDK.Yunding.Model;
using System;
using System.Collections.Generic;
using System.Text;
#if NET40||NET35
#else
using System.Threading.Tasks;
#endif

namespace JDCloudSDK.Yunding.Client
{
    /// <summary>
    ///  云鼎2.0 openApi
    ///  云鼎2.0 openApi 相关接口
    ///  Yunding Api 客户端
    ///</summary>
    public class YundingClient : JdcloudClient
    {

        /// <summary>
        ///  默认私有构造函数
        /// </summary>
        private YundingClient()
        {

        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="environment">sdk 环境配置信息</param>
        public YundingClient(CredentialsProvider credentialsProvider, HttpRequestConfig httpRequestConfig,SDKEnvironment environment)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
            this.environment = environment;
        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="credentialsProvider">认证信息</param>
        public YundingClient(CredentialsProvider credentialsProvider,HttpRequestConfig httpRequestConfig)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        /// 默认构造函数，
        /// 注意如果使用此方法 httpRequestConfig 使用的http 请求 schema 为Https
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        public YundingClient(CredentialsProvider credentialsProvider)
        {
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        ///  版本号 1.2.3
        ///</summary>
        public const string ClientVersion = "1.2.3";

        private const string apiVersion = "v2";
        private const string userAgentPrefix = "JdcloudSdkDotNet";
        private const string defaultEndpoint = "yunding.jdcloud-api.com";
        private const string serviceName = "yunding";
        private const string userAgent = userAgentPrefix + "/" + ClientVersion + " " + serviceName + "/" + apiVersion;


        private SDKEnvironment environment = new SDKEnvironment(defaultEndpoint);
        private CredentialsProvider credentialsProvider;
        private HttpRequestConfig httpRequestConfig;

        /// <summary>
        ///  获取证书信息
        ///</summary>
        public override CredentialsProvider CredentialsProvider   { get { return credentialsProvider; } }

        /// <summary>
        ///  获取http 客户端配置信息
        ///</summary>
        public override HttpRequestConfig HttpRequestConfig { get { return httpRequestConfig; } }

        /// <summary>
        ///  获取sdk环境配置信息
        ///</summary>
        public override SDKEnvironment SDKEnvironment { get { return environment; } }

        /// <summary>
        ///  获取用户自定义浏览器识别字符串
        ///</summary>
        public override string UserAgent { get { return userAgent; } }

        /// <summary>
        ///  获取服务名称
        ///</summary>
        public override string ServiceName { get { return serviceName; } }

        /// <summary>
        ///  获取版本号
        ///</summary>
        public override string Version { get { return apiVersion; } }



#if NET40||NET35
        /// <summary>
        ///  查询RDS实例（MySQL、SQL Server等）的详细信息以及MySQL只读实例详细信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRdsInstanceResponse DescribeRdsInstance(DescribeRdsInstanceRequest request) {
            return  new DescribeRdsInstanceExecutor().Client(this).Execute<DescribeRdsInstanceResponse, DescribeRdsInstanceResult, DescribeRdsInstanceRequest>(request);
        }
#else
        /// <summary>
        ///  查询RDS实例（MySQL、SQL Server等）的详细信息以及MySQL只读实例详细信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRdsInstanceResponse> DescribeRdsInstance(DescribeRdsInstanceRequest request) {
            return await new DescribeRdsInstanceExecutor().Client(this).Execute<DescribeRdsInstanceResponse, DescribeRdsInstanceResult, DescribeRdsInstanceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询云鼎数据库实例列表
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeYdRdsInstancesResponse DescribeYdRdsInstances(DescribeYdRdsInstancesRequest request) {
            return  new DescribeYdRdsInstancesExecutor().Client(this).Execute<DescribeYdRdsInstancesResponse, DescribeYdRdsInstancesResult, DescribeYdRdsInstancesRequest>(request);
        }
#else
        /// <summary>
        ///  查询云鼎数据库实例列表
        /// 
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeYdRdsInstancesResponse> DescribeYdRdsInstances(DescribeYdRdsInstancesRequest request) {
            return await new DescribeYdRdsInstancesExecutor().Client(this).Execute<DescribeYdRdsInstancesResponse, DescribeYdRdsInstancesResult, DescribeYdRdsInstancesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteSubnetResponse DeleteSubnet(DeleteSubnetRequest request) {
            return  new DeleteSubnetExecutor().Client(this).Execute<DeleteSubnetResponse, DeleteSubnetResult, DeleteSubnetRequest>(request);
        }
#else
        /// <summary>
        ///  删除子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteSubnetResponse> DeleteSubnet(DeleteSubnetRequest request) {
            return await new DeleteSubnetExecutor().Client(this).Execute<DeleteSubnetResponse, DeleteSubnetResult, DeleteSubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询子网列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeSubnetsResponse DescribeSubnets(DescribeSubnetsRequest request) {
            return  new DescribeSubnetsExecutor().Client(this).Execute<DescribeSubnetsResponse, DescribeSubnetsResult, DescribeSubnetsRequest>(request);
        }
#else
        /// <summary>
        ///  查询子网列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeSubnetsResponse> DescribeSubnets(DescribeSubnetsRequest request) {
            return await new DescribeSubnetsExecutor().Client(this).Execute<DescribeSubnetsResponse, DescribeSubnetsResult, DescribeSubnetsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看某个RDS实例下所有账号信息，包括账号名称、对各个数据库的访问权限信息等
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRdsAccountsResponse DescribeRdsAccounts(DescribeRdsAccountsRequest request) {
            return  new DescribeRdsAccountsExecutor().Client(this).Execute<DescribeRdsAccountsResponse, DescribeRdsAccountsResult, DescribeRdsAccountsRequest>(request);
        }
#else
        /// <summary>
        ///  查看某个RDS实例下所有账号信息，包括账号名称、对各个数据库的访问权限信息等
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRdsAccountsResponse> DescribeRdsAccounts(DescribeRdsAccountsRequest request) {
            return await new DescribeRdsAccountsExecutor().Client(this).Execute<DescribeRdsAccountsResponse, DescribeRdsAccountsResult, DescribeRdsAccountsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateSubnetResponse CreateSubnet(CreateSubnetRequest request) {
            return  new CreateSubnetExecutor().Client(this).Execute<CreateSubnetResponse, CreateSubnetResult, CreateSubnetRequest>(request);
        }
#else
        /// <summary>
        ///  创建子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateSubnetResponse> CreateSubnet(CreateSubnetRequest request) {
            return await new CreateSubnetExecutor().Client(this).Execute<CreateSubnetResponse, CreateSubnetResult, CreateSubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  监控数据上报。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public PutProductMetricDataResponse PutProductMetricData(PutProductMetricDataRequest request) {
            return  new PutProductMetricDataExecutor().Client(this).Execute<PutProductMetricDataResponse, PutProductMetricDataResult, PutProductMetricDataRequest>(request);
        }
#else
        /// <summary>
        ///  监控数据上报。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<PutProductMetricDataResponse> PutProductMetricData(PutProductMetricDataRequest request) {
            return await new PutProductMetricDataExecutor().Client(this).Execute<PutProductMetricDataResponse, PutProductMetricDataResult, PutProductMetricDataRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  从RDS实例中删除数据库。为便于管理和数据恢复，RDS对用户权限进行了控制，用户仅能通过控制台或本接口删除数据库 [MFA enabled]
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteRdsDatabaseResponse DeleteRdsDatabase(DeleteRdsDatabaseRequest request) {
            return  new DeleteRdsDatabaseExecutor().Client(this).Execute<DeleteRdsDatabaseResponse, DeleteRdsDatabaseResult, DeleteRdsDatabaseRequest>(request);
        }
#else
        /// <summary>
        ///  从RDS实例中删除数据库。为便于管理和数据恢复，RDS对用户权限进行了控制，用户仅能通过控制台或本接口删除数据库 [MFA enabled]
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteRdsDatabaseResponse> DeleteRdsDatabase(DeleteRdsDatabaseRequest request) {
            return await new DeleteRdsDatabaseExecutor().Client(this).Execute<DeleteRdsDatabaseResponse, DeleteRdsDatabaseResult, DeleteRdsDatabaseRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  云拔测-可用性agent任务查询接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeTasksResponse DescribeTasks(DescribeTasksRequest request) {
            return  new DescribeTasksExecutor().Client(this).Execute<DescribeTasksResponse, DescribeTasksResult, DescribeTasksRequest>(request);
        }
#else
        /// <summary>
        ///  云拔测-可用性agent任务查询接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeTasksResponse> DescribeTasks(DescribeTasksRequest request) {
            return await new DescribeTasksExecutor().Client(this).Execute<DescribeTasksResponse, DescribeTasksResult, DescribeTasksRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  取消该账号对某个数据库的所有权限。权限取消后，该账号将不能访问此数据库。取消账号对某个数据库的访问权限，不影响该账号对其他数据库的访问权限
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RevokePrivilegeResponse RevokePrivilege(RevokePrivilegeRequest request) {
            return  new RevokePrivilegeExecutor().Client(this).Execute<RevokePrivilegeResponse, RevokePrivilegeResult, RevokePrivilegeRequest>(request);
        }
#else
        /// <summary>
        ///  取消该账号对某个数据库的所有权限。权限取消后，该账号将不能访问此数据库。取消账号对某个数据库的访问权限，不影响该账号对其他数据库的访问权限
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RevokePrivilegeResponse> RevokePrivilege(RevokePrivilegeRequest request) {
            return await new RevokePrivilegeExecutor().Client(this).Execute<RevokePrivilegeResponse, RevokePrivilegeResult, RevokePrivilegeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  获取当前实例的所有数据库详细信息的列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRdsDatabasesResponse DescribeRdsDatabases(DescribeRdsDatabasesRequest request) {
            return  new DescribeRdsDatabasesExecutor().Client(this).Execute<DescribeRdsDatabasesResponse, DescribeRdsDatabasesResult, DescribeRdsDatabasesRequest>(request);
        }
#else
        /// <summary>
        ///  获取当前实例的所有数据库详细信息的列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRdsDatabasesResponse> DescribeRdsDatabases(DescribeRdsDatabasesRequest request) {
            return await new DescribeRdsDatabasesExecutor().Client(this).Execute<DescribeRdsDatabasesResponse, DescribeRdsDatabasesResult, DescribeRdsDatabasesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询弹性网卡信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkInterfaceResponse DescribeNetworkInterface(DescribeNetworkInterfaceRequest request) {
            return  new DescribeNetworkInterfaceExecutor().Client(this).Execute<DescribeNetworkInterfaceResponse, DescribeNetworkInterfaceResult, DescribeNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  查询弹性网卡信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkInterfaceResponse> DescribeNetworkInterface(DescribeNetworkInterfaceRequest request) {
            return await new DescribeNetworkInterfaceExecutor().Client(this).Execute<DescribeNetworkInterfaceResponse, DescribeNetworkInterfaceResult, DescribeNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  监控数据上报。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public PutResponse Put(PutRequest request) {
            return  new PutExecutor().Client(this).Execute<PutResponse, PutResult, PutRequest>(request);
        }
#else
        /// <summary>
        ///  监控数据上报。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<PutResponse> Put(PutRequest request) {
            return await new PutExecutor().Client(this).Execute<PutResponse, PutResult, PutRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给网卡删除secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UnassignSecondaryIpsResponse UnassignSecondaryIps(UnassignSecondaryIpsRequest request) {
            return  new UnassignSecondaryIpsExecutor().Client(this).Execute<UnassignSecondaryIpsResponse, UnassignSecondaryIpsResult, UnassignSecondaryIpsRequest>(request);
        }
#else
        /// <summary>
        ///  给网卡删除secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UnassignSecondaryIpsResponse> UnassignSecondaryIps(UnassignSecondaryIpsRequest request) {
            return await new UnassignSecondaryIpsExecutor().Client(this).Execute<UnassignSecondaryIpsResponse, UnassignSecondaryIpsResult, UnassignSecondaryIpsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询弹性网卡列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkInterfacesResponse DescribeNetworkInterfaces(DescribeNetworkInterfacesRequest request) {
            return  new DescribeNetworkInterfacesExecutor().Client(this).Execute<DescribeNetworkInterfacesResponse, DescribeNetworkInterfacesResult, DescribeNetworkInterfacesRequest>(request);
        }
#else
        /// <summary>
        ///  查询弹性网卡列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkInterfacesResponse> DescribeNetworkInterfaces(DescribeNetworkInterfacesRequest request) {
            return await new DescribeNetworkInterfacesExecutor().Client(this).Execute<DescribeNetworkInterfacesResponse, DescribeNetworkInterfacesResult, DescribeNetworkInterfacesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给网卡分配secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AssignSecondaryIpsResponse AssignSecondaryIps(AssignSecondaryIpsRequest request) {
            return  new AssignSecondaryIpsExecutor().Client(this).Execute<AssignSecondaryIpsResponse, AssignSecondaryIpsResult, AssignSecondaryIpsRequest>(request);
        }
#else
        /// <summary>
        ///  给网卡分配secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AssignSecondaryIpsResponse> AssignSecondaryIps(AssignSecondaryIpsRequest request) {
            return await new AssignSecondaryIpsExecutor().Client(this).Execute<AssignSecondaryIpsResponse, AssignSecondaryIpsResult, AssignSecondaryIpsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改允许访问实例的IP白名单。白名单是允许访问当前实例的IP/IP段列表，缺省情况下，白名单对本VPC开放。如果用户开启了外网访问的功能，还需要对外网的IP配置白名单。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyRdsWhiteListResponse ModifyRdsWhiteList(ModifyRdsWhiteListRequest request) {
            return  new ModifyRdsWhiteListExecutor().Client(this).Execute<ModifyRdsWhiteListResponse, ModifyRdsWhiteListResult, ModifyRdsWhiteListRequest>(request);
        }
#else
        /// <summary>
        ///  修改允许访问实例的IP白名单。白名单是允许访问当前实例的IP/IP段列表，缺省情况下，白名单对本VPC开放。如果用户开启了外网访问的功能，还需要对外网的IP配置白名单。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyRdsWhiteListResponse> ModifyRdsWhiteList(ModifyRdsWhiteListRequest request) {
            return await new ModifyRdsWhiteListExecutor().Client(this).Execute<ModifyRdsWhiteListResponse, ModifyRdsWhiteListResult, ModifyRdsWhiteListRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建一个数据库。 为了实例的管理和数据恢复，RDS对用户权限进行了限制，用户仅能通过控制台或本接口创建数据库
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateRdsDatabaseResponse CreateRdsDatabase(CreateRdsDatabaseRequest request) {
            return  new CreateRdsDatabaseExecutor().Client(this).Execute<CreateRdsDatabaseResponse, CreateRdsDatabaseResult, CreateRdsDatabaseRequest>(request);
        }
#else
        /// <summary>
        ///  创建一个数据库。 为了实例的管理和数据恢复，RDS对用户权限进行了限制，用户仅能通过控制台或本接口创建数据库
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateRdsDatabaseResponse> CreateRdsDatabase(CreateRdsDatabaseRequest request) {
            return await new CreateRdsDatabaseExecutor().Client(this).Execute<CreateRdsDatabaseResponse, CreateRdsDatabaseResult, CreateRdsDatabaseRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  授予账号的数据库访问权限，即该账号对数据库拥有什么权限。一个账号可以对多个数据库具有访问权限。&lt;br&gt;为便于管理，RDS对权限进行了归类，目前提供以下两种权限&lt;br&gt;- ro：只读权限，用户只能读取数据库中的数据，不能进行创建、插入、删除、更改等操作。&lt;br&gt;- rw：读写权限，用户可以对数据库进行增删改查等操作
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public GrantRdsPrivilegeResponse GrantRdsPrivilege(GrantRdsPrivilegeRequest request) {
            return  new GrantRdsPrivilegeExecutor().Client(this).Execute<GrantRdsPrivilegeResponse, GrantRdsPrivilegeResult, GrantRdsPrivilegeRequest>(request);
        }
#else
        /// <summary>
        ///  授予账号的数据库访问权限，即该账号对数据库拥有什么权限。一个账号可以对多个数据库具有访问权限。&lt;br&gt;为便于管理，RDS对权限进行了归类，目前提供以下两种权限&lt;br&gt;- ro：只读权限，用户只能读取数据库中的数据，不能进行创建、插入、删除、更改等操作。&lt;br&gt;- rw：读写权限，用户可以对数据库进行增删改查等操作
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<GrantRdsPrivilegeResponse> GrantRdsPrivilege(GrantRdsPrivilegeRequest request) {
            return await new GrantRdsPrivilegeExecutor().Client(this).Execute<GrantRdsPrivilegeResponse, GrantRdsPrivilegeResult, GrantRdsPrivilegeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建网卡接口，只能创建辅助网卡
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateNetworkInterfaceResponse CreateNetworkInterface(CreateNetworkInterfaceRequest request) {
            return  new CreateNetworkInterfaceExecutor().Client(this).Execute<CreateNetworkInterfaceResponse, CreateNetworkInterfaceResult, CreateNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  创建网卡接口，只能创建辅助网卡
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateNetworkInterfaceResponse> CreateNetworkInterface(CreateNetworkInterfaceRequest request) {
            return await new CreateNetworkInterfaceExecutor().Client(this).Execute<CreateNetworkInterfaceResponse, CreateNetworkInterfaceResult, CreateNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询子网信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeSubnetResponse DescribeSubnet(DescribeSubnetRequest request) {
            return  new DescribeSubnetExecutor().Client(this).Execute<DescribeSubnetResponse, DescribeSubnetResult, DescribeSubnetRequest>(request);
        }
#else
        /// <summary>
        ///  查询子网信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeSubnetResponse> DescribeSubnet(DescribeSubnetRequest request) {
            return await new DescribeSubnetExecutor().Client(this).Execute<DescribeSubnetResponse, DescribeSubnetResult, DescribeSubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  批量查询云数据库实例列表信息&lt;br&gt;此接口支持分页查询，默认每页20条。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRdsInstancesResponse DescribeRdsInstances(DescribeRdsInstancesRequest request) {
            return  new DescribeRdsInstancesExecutor().Client(this).Execute<DescribeRdsInstancesResponse, DescribeRdsInstancesResult, DescribeRdsInstancesRequest>(request);
        }
#else
        /// <summary>
        ///  批量查询云数据库实例列表信息&lt;br&gt;此接口支持分页查询，默认每页20条。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRdsInstancesResponse> DescribeRdsInstances(DescribeRdsInstancesRequest request) {
            return await new DescribeRdsInstancesExecutor().Client(this).Execute<DescribeRdsInstancesResponse, DescribeRdsInstancesResult, DescribeRdsInstancesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除弹性网卡接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteNetworkInterfaceResponse DeleteNetworkInterface(DeleteNetworkInterfaceRequest request) {
            return  new DeleteNetworkInterfaceExecutor().Client(this).Execute<DeleteNetworkInterfaceResponse, DeleteNetworkInterfaceResult, DeleteNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  删除弹性网卡接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteNetworkInterfaceResponse> DeleteNetworkInterface(DeleteNetworkInterfaceRequest request) {
            return await new DeleteNetworkInterfaceExecutor().Client(this).Execute<DeleteNetworkInterfaceResponse, DeleteNetworkInterfaceResult, DeleteNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询RDS实例（MySQL、SQL Server等）的真实状态
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeInstanceInfoResponse DescribeInstanceInfo(DescribeInstanceInfoRequest request) {
            return  new DescribeInstanceInfoExecutor().Client(this).Execute<DescribeInstanceInfoResponse, DescribeInstanceInfoResult, DescribeInstanceInfoRequest>(request);
        }
#else
        /// <summary>
        ///  查询RDS实例（MySQL、SQL Server等）的真实状态
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeInstanceInfoResponse> DescribeInstanceInfo(DescribeInstanceInfoRequest request) {
            return await new DescribeInstanceInfoExecutor().Client(this).Execute<DescribeInstanceInfoResponse, DescribeInstanceInfoResult, DescribeInstanceInfoRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建数据库账号，用户可以使用客户端，应用程序等通过该账号和密码登录RDS数据库实例。&lt;br&gt;为便于管理和恢复，RDS对账号进行了限制，数据库账号只能通过控制台或者OpenAPI进行创建、删除账号以及对账号授权等，用户不能通过SQL语句对账号进行相关操作。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateRdsAccountResponse CreateRdsAccount(CreateRdsAccountRequest request) {
            return  new CreateRdsAccountExecutor().Client(this).Execute<CreateRdsAccountResponse, CreateRdsAccountResult, CreateRdsAccountRequest>(request);
        }
#else
        /// <summary>
        ///  创建数据库账号，用户可以使用客户端，应用程序等通过该账号和密码登录RDS数据库实例。&lt;br&gt;为便于管理和恢复，RDS对账号进行了限制，数据库账号只能通过控制台或者OpenAPI进行创建、删除账号以及对账号授权等，用户不能通过SQL语句对账号进行相关操作。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateRdsAccountResponse> CreateRdsAccount(CreateRdsAccountRequest request) {
            return await new CreateRdsAccountExecutor().Client(this).Execute<CreateRdsAccountResponse, CreateRdsAccountResult, CreateRdsAccountRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看RDS实例当前白名单。白名单是允许访问当前实例的IP/IP段列表，缺省情况下，白名单对本VPC开放。如果用户开启了外网访问的功能，还需要对外网的IP配置白名单。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRdsWhiteListResponse DescribeRdsWhiteList(DescribeRdsWhiteListRequest request) {
            return  new DescribeRdsWhiteListExecutor().Client(this).Execute<DescribeRdsWhiteListResponse, DescribeRdsWhiteListResult, DescribeRdsWhiteListRequest>(request);
        }
#else
        /// <summary>
        ///  查看RDS实例当前白名单。白名单是允许访问当前实例的IP/IP段列表，缺省情况下，白名单对本VPC开放。如果用户开启了外网访问的功能，还需要对外网的IP配置白名单。
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRdsWhiteListResponse> DescribeRdsWhiteList(DescribeRdsWhiteListRequest request) {
            return await new DescribeRdsWhiteListExecutor().Client(this).Execute<DescribeRdsWhiteListResponse, DescribeRdsWhiteListResult, DescribeRdsWhiteListRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除数据库账号，账号删除后不可恢复，用户无法再使用该账号登录RDS实例
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteRdsAccountResponse DeleteRdsAccount(DeleteRdsAccountRequest request) {
            return  new DeleteRdsAccountExecutor().Client(this).Execute<DeleteRdsAccountResponse, DeleteRdsAccountResult, DeleteRdsAccountRequest>(request);
        }
#else
        /// <summary>
        ///  删除数据库账号，账号删除后不可恢复，用户无法再使用该账号登录RDS实例
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteRdsAccountResponse> DeleteRdsAccount(DeleteRdsAccountRequest request) {
            return await new DeleteRdsAccountExecutor().Client(this).Execute<DeleteRdsAccountResponse, DeleteRdsAccountResult, DeleteRdsAccountRequest>(request).ConfigureAwait(false);
        }
#endif

            /// <summary>
            ///  默认YundingClient 构造器 接口
            ///</summary>
            public interface Builder
            {

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>yundingClient 构造器</returns>
                Builder CredentialsProvider(CredentialsProvider provider);

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>yundingClient 构造器</returns>
                Builder Environment(Core.Client.SDKEnvironment environment);

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>yundingClient 构造器</returns>
                Builder HttpRequestConfig(HttpRequestConfig config);

                /// <summary>
                ///  构造YundingClient 对象
                ///</summary>
                YundingClient Build();
            }

            /// <summary>
            ///  默认YundingClient 构造器
            ///</summary>
            public class DefaultBuilder : Builder
            {
                /// <summary>
                ///  YundingClient service client
                /// </summary>
                private  YundingClient yundingClient;

                /// <summary>
                ///  默认YundingClient 构造器构造对象
                ///</summary>
                public DefaultBuilder()
                {
                    yundingClient = new YundingClient();
                }

                /// <summary>
                ///  构造YundingClient 对象
                ///</summary>
                public YundingClient Build()
                {
                    if (yundingClient.CredentialsProvider == null)
                    {
                        //if credentialsProvider not set, try load jdcloud global default  credentials provider
                        yundingClient.credentialsProvider = JdCloud.DefaultInstance.GetCredentialsProvider();
                        if (yundingClient.credentialsProvider == null)
                        {
                            throw new ArgumentNullException("YundingClient build error: jdcloud credentials provider not set");
                        }
                    }
                    if (yundingClient.HttpRequestConfig == null)
                    {
                        yundingClient.httpRequestConfig = JdCloud.DefaultInstance.GetHttpRequestConfig();
                        if (yundingClient.httpRequestConfig == null)
                        {
                        throw new ArgumentNullException("YundingClient build error: http request config not set");
                        }
                    }
                    return yundingClient;
                }

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>yundingClient 构造器</returns>
                public Builder CredentialsProvider(CredentialsProvider provider)
                {
                    yundingClient.credentialsProvider = provider;
                    return this;
                }

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>yundingClient 构造器</returns>
                public Builder Environment(SDKEnvironment environment)
                {
                    yundingClient.environment = environment;
                    return this;
                }

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>yundingClient 构造器</returns>
                public Builder HttpRequestConfig(HttpRequestConfig config)
                {
                    yundingClient.httpRequestConfig = config;
                    return this;
                }
            }
    }
}
